const express = require('express')
const router = express.Router()
const multer = require('multer') //用于上传图片

// 初始化上传图片对象upload
let upload = multer({
    limits: { // 限制设置
        //限制文件大小800kb
        fileSize: 800 * 1024,
        //限制文件数量
        files: 1
    },
    storage: multer.diskStorage({ //存储文件相关设置
        // 设置上传文件路径
        destination: function(req, file, cb) {
            cb(null, './static/uploads')
        },
        // 设置上传文件名称
        filename: function(req, file, cb) {
            // console.log( file )//上传的文件对象
            // {
            //     fieldname: 'hehe',
            //     originalname: '3.png',
            //     encoding: '7bit',
            //     mimetype: 'image/png'
            //   }
            // 文件名：upload-+时间戳+文件后缀
            let filen = 'upload-' + Date.now() + '.' + file.mimetype.split('/')[1]
            cb(null, filen)
        }
    }),
    fileFilter: function(req, file, cb) { // 过滤上传的文件
        // console.log( file )
        // {
        //     fieldname: 'hehe',
        //     originalname: '3-asdf.png',
        //     encoding: '7bit',
        //     mimetype: 'image/png'
        //   }
        let types = ['png', 'jpg', 'gif', 'jpeg', 'webp'] //允许上传文件格式列表
        let arr = file.originalname.split('.')
        let flag = arr[arr.length - 1] //图片后缀名
        if (types.includes(flag)) {
            cb(null, true) // 接收文件
        } else {
            cb(null, false) // 拒收文件
        }
    }
})

// 生成上传图片的方法（单例）上传图片的 name="hehe"
let doSomeThing = upload.single('hehe')

// 上传图片 （只能用post）
/**
 * @api {post} /file/upload 上传图片
 * @apiGroup file
 *
 * @apiParam {String} null 无需参数
 *
 * @apiSuccessExample 返回数据示例:
 * {
 *     "err": 0,
 *     "msg": "上传成功",
 *     "imgurl": './uploads/upload-16936743748.png'
 * }
 */
router.post('/upload', (req, res) => {
    // console.log(req.file) // undefiend
    doSomeThing(req, res, (err) => { //上传完成
        // console.log(req.file)
        // {
        //     fieldname: 'hehe',
        //     originalname: 'api.png',
        //     encoding: '7bit',
        //     mimetype: 'image/png',
        //     destination: './static/uploads',
        //     filename: 'upload-1619078828902.png',
        //     path: 'static\\uploads\\upload-1619078828902.png',
        //     size: 228
        //   }
        if (err) { //有错时，说明上传文件不符合限制要求
            return res.send({ err: -1, msg: '上传图片不能大于800kb' })
        }
        if (!req.file) { //文件被拒收时，为 req.file = undefine
            return res.send({ err: -2, msg: '只能上传图片！' })
        }

        // 上传图片成功 req.file = {。。。}
        let url = '../uploads/' + req.file.filename
        res.send({ err: 0, msg: '图片上传成功', imgurl: url })
    })
})

module.exports = router